home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / pack / xpklibs / xpk_pack.s next >
Text File  |  1980-01-03  |  2KB  |  87 lines

  1.  
  2.         incdir    _include:
  3.         include    exec/exec.i
  4.         include    libraries/dos_lib.i
  5.         include    libraries/exec_lib.i
  6.         include    libraries/dosextens.i
  7.         include    include:libraries/xpk.i
  8.  
  9. start:        move.l    4.w,a6
  10.         lea    xpkname(pc),a1
  11.         jsr    _LVOOldOpenLibrary(a6)
  12.         move.l    d0,xpkbase        ; Store XPK Library base!
  13.         beq.b    cleanup            ; ERROR -> Exit
  14.  
  15.         move.l    d0,a6            ; XPKBase to A6
  16.         lea    tags(pc),a0
  17.         jsr    _LVOXpkPack(a6)
  18.         tst.l    d0
  19.         beq.w    noerror
  20.  
  21.         move.w    #$ff0,$dff180
  22.         
  23. noerror
  24.  
  25. cleanup        move.l    xpkbase(pc),d0
  26.         beq.b    exit            ; Library not open
  27.         move.l    d0,a1
  28.         move.l    4.w,a6
  29.         jsr    _LVOCloseLibrary(a6)    ; Close XPK library
  30.  
  31. exit        moveq    #0,d0            ; No error code!
  32.  
  33.         lea    dst,a0
  34.         move.l    4(a0),d0        ; packed size
  35.         move.l    #srclen,d1
  36.         move.l    d1,d2            ;d1=original size..
  37.         sub.l    d0,d2
  38.         move.l    d1,d3
  39. getgain1:    tst.l    d2
  40.         bmi.s    getgain2
  41.         tst.l    d3
  42.         bmi.s    getgain2
  43.         add.l    d2,d2
  44.         add.l    d3,d3
  45.         bra.s    getgain1
  46.  
  47. getgain2:    lsr.l    #1,d2
  48.         lsr.l    #1,d3
  49.         clr.w    d2
  50.         clr.w    d3
  51.         swap    d2
  52.         swap    d3
  53.         mulu    #100,d2
  54.         divu    d3,d2
  55. ;-------------- d2.w = % gain
  56. ;        d0.l = new size
  57. ;        d1.l = old size
  58.  
  59.         lea    errbuf(pc),a0
  60.  
  61.         lea    dst+48,a1
  62.         lea    -48(a1,d0.l),a2
  63.         rts
  64.  
  65. xpkbase:    dc.l    1
  66.  
  67. tags:        dc.l    XPK_InBuf,src
  68.         dc.l    XPK_InLen,srclen
  69.         dc.l    XPK_OutBuf,dst
  70.         dc.l    XPK_OutBufLen,(srclen)+(srclen/2)
  71.         dc.l    XPK_FindMethod,packmode
  72.         dc.l    XPK_PackMode,packmode
  73.         dc.l    XPK_GetError,errbuf        ; A pointer to the error message buffer
  74.         dc.l    TAG_DONE
  75.  
  76. errbuf:        ds.b    82
  77.         even
  78. packmode:    dc.b    'CRM2',0
  79.         even
  80. xpkname:    dc.b    'xpkmaster.library',0
  81.         even
  82. src:        incbin    'dl:68khelper/mod.bonus'
  83. srcend        even
  84. srclen        =    srcend-src
  85. dst:        ds.b    10240*2
  86.         end
  87.